A three-dimensional (3D) model can be used to represent an object in three dimensions on a computing device. Conventionally, a 3D model can be created using specialized software. This software is often expensive, and creating a 3D model from scratch using the software can be tedious and difficult. Thus, 3D (RGBD) scanning is often used to create 3D models from existing objects without the need for expensive software. 3D scanning uses RGB (color) information and separate D (depth) information to model the object. Typically, a 3D mesh of a scanned object is created for a 3D model using depth information. The 3D mesh defines the shape of the object. Color information for the 3D model can be represented by the vertex colors, i.e., the colors at the vertices in the 3D mesh. In this regard, the quality of the scanned object (texture and fidelity) depends on the density of the vertices in the 3D mesh.
Currently, most of the 3D scanners available in the market have much lower depth resolution relative to their color resolution. Therefore, color detail in 3D models scanned using these 3D scanners is usually very low. While color detail may not be as important for object with a few colors or little detail, object with fine details, such as jewelry, precious artifacts, replicas, parts of the human body, etc., may require a high level of color detail.
Many 3D scanners cannot accurately produce colors and textures of objects requiring a high level of detail. For example, color bleeding may occur for areas of the 3D model with a high degree of color variation due to not having enough vertices available to store the corresponding color information. One solution is to increase the number of vertices of the entire 3D model. However, this can result in very large files to store the 3D models. Another solution is to manually subdivide the vertices for specific regions of an object. For example, a user can view the 3D model in a 3D modeling application and manually subdivide areas of the 3D model to create additional vertices. However, manually subdividing vertices is very tedious and it is difficult to apply varying levels of subdivision to the object.